package cn.thr.ymcc.service.impl;

import cn.thr.ymcc.CourseDoc;
import cn.thr.ymcc.domain.CourseCart;
import cn.thr.ymcc.dto.OrderDto;
import cn.thr.ymcc.jwt.LoginContextUtils;
import cn.thr.ymcc.mapper.CourseCartMapper;
import cn.thr.ymcc.result.JsonResult;
import cn.thr.ymcc.service.ICourseCartService;
import cn.thr.ymcc.util.AssertUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author thr
 * @since 2023-03-09
 */
@Service
public class CourseCartServiceImpl extends ServiceImpl<CourseCartMapper, CourseCart> implements ICourseCartService {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Autowired
    private LoginContextUtils loginContextUtils;

    @Override
    public JsonResult add(CourseDoc courseDoc, HttpServletRequest request) {
        //执行下订单业务之前，先校验redis 里面中是否存在token 这个key  执行完要删除这个key
        AssertUtil.isTrue(StringUtils.hasText(courseDoc.getToken()),"非法操作");
        AssertUtil.isTrue(redisTemplate.hasKey(courseDoc.getToken()),"请不要重复提交");
        //获取请求头
        String token = request.getHeader(loginContextUtils.JWT_TOKEN_NAME);
        //获得用户id
        Long loginUserId = loginContextUtils.getLoginUserId(token);
        //获得用户名字
        String loginUserName = loginContextUtils.getLoginUserName(token);


        CourseCart courseCart1 = baseMapper.selectOne(new QueryWrapper<CourseCart>()
                .eq("course_id", courseDoc.getId())
                .eq("login_id", loginUserId));

        AssertUtil.isTrue(courseCart1 == null ,"该课程已经添加");

        CourseCart courseCart = new CourseCart();
        courseCart.setLoginId(loginUserId);
        courseCart.setCourseName(courseDoc.getName());
        courseCart.setCoursePic(courseDoc.getPic());
        courseCart.setCoursePrice(new BigDecimal(courseDoc.getPrice()));
        courseCart.setCount(1);
        courseCart.setCourseId(courseDoc.getId());
        courseCart.setGradeName(courseDoc.getGradeName());
        courseCart.setUserName(loginUserName);
        baseMapper.insert(courseCart);

        return JsonResult.me();
    }
    /**
     * 购物车结算
     * @param courseIds
     * @return
     */
    @Override
    public Double calAmount(List<Long> courseIds,HttpServletRequest request) {
        //查询用户的id
        Long loginUserId = loginContextUtils.getLoginUserId(request.getHeader(LoginContextUtils.JWT_TOKEN_NAME));
        //当前登录购物车里面所有的课程
        List<CourseCart> user_id = baseMapper.selectList(new QueryWrapper<CourseCart>().eq("login_id", loginUserId));

        //循环添加等金额
        Double totalAmount = 0D;
        for (CourseCart courseCart : user_id) {
            for (Long courseId : courseIds) {
                if(courseId == courseCart.getCourseId()){
                    totalAmount += courseCart.getCoursePrice().doubleValue() * courseCart.getCount();
                }
            }
        }


        return totalAmount;
    }
}
